package com.seedog.mq;

import com.seedog.mq.model.Message;
import com.seedog.mq.exception.TopicNotFoundException;
import com.seedog.mq.exception.ProducerException;

import java.util.List;

/**
 * 消息生产者接口，用于向消息队列发送消息
 */
public interface Producer {
    /**
     * 获取生产者ID
     * @return 生产者ID
     */
    String getProducerId();
    
    /**
     * 向指定主题发送消息
     * @param topicName 主题名称
     * @param message 消息对象
     * @return 消息ID
     * @throws TopicNotFoundException 如果主题不存在
     * @throws ProducerException 如果发送消息失败
     */
    String send(String topicName, Message message) throws TopicNotFoundException, ProducerException;
    
    /**
     * 向指定主题发送文本消息
     * @param topicName 主题名称
     * @param content 消息内容
     * @return 消息ID
     * @throws TopicNotFoundException 如果主题不存在
     * @throws ProducerException 如果发送消息失败
     */
    String send(String topicName, String content) throws TopicNotFoundException, ProducerException;
    
    /**
     * 向指定主题发送带过期时间的文本消息
     * @param topicName 主题名称
     * @param content 消息内容
     * @param expireTime 过期时间（毫秒）
     * @return 消息ID
     * @throws TopicNotFoundException 如果主题不存在
     * @throws ProducerException 如果发送消息失败
     */
    String send(String topicName, String content, long expireTime) throws TopicNotFoundException, ProducerException;
    
    /**
     * 向指定主题批量发送消息
     * @param topicName 主题名称
     * @param messages 消息列表
     * @return 已发送的消息ID列表
     * @throws TopicNotFoundException 如果主题不存在
     * @throws ProducerException 如果发送消息失败
     */
    List<String> sendBatch(String topicName, List<Message> messages) throws TopicNotFoundException, ProducerException;
    
    /**
     * 关闭生产者
     */
    void close();
}